package reportehorario.modelo.dao;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Time;
import java.util.ArrayList;
import reportehorario.conexion.ConectaDB;
import reportehorario.modelo.interfaces.UsuarioDAO;
import reportehorario.recursos.beans.BeanUsuario;

/**
 *
 * @author Metis Gaia 2010-02
 */
public class MySQLUsuarioDAO implements UsuarioDAO {

    public ArrayList<BeanUsuario> obtenerUsuarios() throws Exception {
        BeanUsuario bean = null;
        ArrayList<BeanUsuario> lista = new ArrayList<BeanUsuario>();
        Connection conn = new ConectaDB().getAcceso();
        String store = "{call SP_LISTAR_USUARIOS()}";
        CallableStatement call = conn.prepareCall(store);
        ResultSet rs = call.executeQuery();

        while (rs.next()) {
            bean = new BeanUsuario();
            bean.setIdUsuario(rs.getInt("idUsuario"));
            bean.setUsuario(rs.getString("Usuario"));
            bean.setHora_entrada(rs.getTime("hora_entrada"));
            bean.setMinutos_tolerancia(rs.getInt("min_tolerancia"));
            bean.setNombre_apellido(rs.getString("nombre_apellido"));
            ArrayList<Time> listaEntradasEstablecidas = new ArrayList<Time>();
            ArrayList<Time> listaSalidasEstablecidas = new ArrayList<Time>();

            //extraemos las horas establecidas de la tabla usuario (entrada y salida)
            for (int i = 1; i < 6; i++) {
                listaEntradasEstablecidas.add(rs.getTime(i * 2 + 5));
                listaSalidasEstablecidas.add(rs.getTime(i * 2 + 6));
            }
            bean.setListaEntradas(listaEntradasEstablecidas);
            bean.setListaSalidas(listaSalidasEstablecidas);
            lista.add(bean);
        }
        call.close();
        conn.close();
        return lista;
    }

    public int obtenerIdUsuario(String usuario) throws Exception {
        int id=0;
        Connection conn = new ConectaDB().getAcceso();
        String store = "{call SP_OBTENER_IDUSUARIO(?)}";
        CallableStatement call = conn.prepareCall(store);
        call.setString(1, usuario);
        ResultSet rs = call.executeQuery();

        while (rs.next()) {
            id = rs.getInt("idUsuario");
        }

        call.close();
        conn.close();
        return id;
    }
}
